﻿using NLog;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 畜牧业审核程序国产.Models.ToolsClass
{
    internal class StaticLogger
    {
        /// <summary>
        /// 设置日志路径的环境变量
        /// </summary>
        /// <param name="auditProgramFolderPath"></param>
        public static void SetLogDirectory(string logDirPath)
        {
            // 设置 NLog 环境变量，用于动态修改日志路径
            // Environment.SetEnvironmentVariable("LogDirPath", logDirPath);
            Environment.SetEnvironmentVariable("LogFolderInAuditProgramFolder", logDirPath);
        }
        /// <summary>
        /// </summary>
        /// <param name="context">context</param>
        /// <param name="name">log operation</param>
        private static void Log(string context, string name, LogLevel lever)
        {
            try
            {
                var currentLogger = LogManager.GetLogger(name);
                if (currentLogger != null)
                    currentLogger.Log(lever, context);
            }
            catch
            {

            }
        }

        private static void Log(string context, string name, LogLevel level, Exception ex)
        {
            try
            {
                var currentLogger = LogManager.GetLogger(name);
                if (currentLogger != null)
                {
                    string exception = string.Empty;
                    if (ex != null)
                    {
                        exception = "异常信息:" + ex.Message;
                        if (ex.InnerException != null)
                            exception += ex.InnerException.Message;
                    }
                    currentLogger.Log(level, context + exception);
                }
            }
            catch { }

        }

        private static void LogInfo(string context, string name)
        {
            try
            {
                var currentLogger = LogManager.GetLogger(name);
                //Debug.Print($"Logger instance: {currentLogger}");
                if (currentLogger != null)
                    currentLogger.Log(LogLevel.Info, context);
            }
            catch
            {

            }
        }
        public static void SystemInfo(string context)
        {
            LogInfo(context, "System");
        }
        //其它类型日志，自由添加，注意Nlog.Config也要配置好
        public static void SystemOther(string context)
        {
            LogInfo(context, "Other");
        }

        //添加error日志输出
        // 新增 LogError 方法
        public static void LogError(string context, string name)
        {
            Log(context, name, LogLevel.Error);
        }
        // 新增 LogError 方法，带异常信息
        public static void LogError(string context, string name, Exception ex)
        {
            Log(context, name, LogLevel.Error, ex);
        }
        // 新增 SystemError 方法
        public static void SystemError(string context)
        {
            LogError(context, "System");
        }
        // 新增 SystemError 方法，带异常信息
        public static void SystemError(string context, Exception ex)
        {
            LogError(context, "System", ex);
        }
    }


    //public static class StaticLogger
    //{
    //    private static readonly Dictionary<string, Logger> _loggers = new Dictionary<string, Logger>();

    //    private static Logger GetLogger(string name)
    //    {
    //        if (_loggers.TryGetValue(name, out var logger))
    //        {
    //            return logger;
    //        }

    //        logger = LogManager.GetLogger(name);
    //        _loggers[name] = logger;
    //        return logger;
    //    }

    //    public static void Log(string context, string name, LogLevel level)
    //    {
    //        try
    //        {
    //            if (string.IsNullOrEmpty(context) || string.IsNullOrEmpty(name))
    //            {
    //                return;
    //            }

    //            var currentLogger = GetLogger(name);
    //            currentLogger.Log(level, context);
    //        }
    //        catch (Exception ex)
    //        {
    //            Console.Error.WriteLine($"日志记录失败: {ex.Message}");
    //        }
    //    }

    //    public static void Log(string context, string name, LogLevel level, Exception ex)
    //    {
    //        try
    //        {
    //            if (string.IsNullOrEmpty(context) || string.IsNullOrEmpty(name))
    //            {
    //                return;
    //            }

    //            var currentLogger = GetLogger(name);
    //            string exception = ex?.ToString() ?? string.Empty;
    //            currentLogger.Log(level, $"{context}\n异常信息: {exception}");
    //        }
    //        catch (Exception ex)
    //        {
    //            Console.Error.WriteLine($"日志记录失败: {ex.Message}");
    //        }
    //    }

    //    public static void LogInfo(string context, string name)
    //    {
    //        Log(context, name, LogLevel.Info);
    //    }

    //    // 新增 LogError 方法
    //    public static void LogError(string context, string name)
    //    {
    //        Log(context, name, LogLevel.Error);
    //    }

    //    // 新增 LogError 方法，带异常信息
    //    public static void LogError(string context, string name, Exception ex)
    //    {
    //        Log(context, name, LogLevel.Error, ex);
    //    }

    //    public static void SystemInfo(string context)
    //    {
    //        LogInfo(context, "System");
    //    }

    //    public static void SystemOther(string context)
    //    {
    //        LogInfo(context, "Other");
    //    }

    //    // 新增 SystemError 方法
    //    public static void SystemError(string context)
    //    {
    //        LogError(context, "System");
    //    }

    //    // 新增 SystemError 方法，带异常信息
    //    public static void SystemError(string context, Exception ex)
    //    {
    //        LogError(context, "System", ex);
    //    }
    //}
}
